import type { LocationQueryValue } from 'vue-router';

// 请求参数
export type BomDataParams = SearchParams & PageCommonParams;

export interface SearchParams {
    /**
     * 开始时间
     */
    beginTime?: string;
    /**
     * bom编码
     */
    bomCode?: string;
    /**
     * bom名称
     */
    bomName?: string;
    /**
     * 结束时间
     */
    endTime?: string;
    /**
     * 子项物料编码
     */
    itemMaterialCode?: string;
    /**
     * 子项物料名称
     */
    itemMaterialName?: string;
    /**
     * 父项物料编码
     */
    parentMaterialCode?: string;
    /**
     * 父项物料名称
     */
    parentMaterialName?: string;
}

// 响应参数
export type BomDataResponse = ResponseListCommon<BomData>;

export interface BomData {
    /**
     * bom编码
     */
    bomCode?: string;
    /**
     * bom名称
     */
    bomName?: string;
    /**
     * 创建时间
     */
    createTime?: Date;
    /**
     * 创建人
     */
    creator?: string;
    /**
     * 数据来源
     */
    dataSource?: DataSource;
    /**
     * BOM id
     */
    id?: number | string;
    /**
     * 物料编码
     */
    materialCode?: string;
    /**
     * 物料id
     */
    materialId?: number;
    /**
     * 物料名称
     */
    materialName?: string;
}

/**
 * 数据来源
 */
export enum DataSource {
    Artificial = 'ARTIFICIAL',
    Excel = 'EXCEL'
}

/**
 * 新增 BOM 数据类型
 */
export interface BomDataRequest {
    /**
     * BOM编码
     */
    bomCode: string;
    /**
     * BOM名称
     */
    bomName: string;
    /**
     * 子项物料
     */
    children: BomItemDTO[];
    /**
     * BOM id
     */
    id: number | string;
    /**
     * 父项物料编码
     */
    materialCode: string;
    /**
     * 物料id
     */
    materialId: string;
    /**
     * 父项物料名称
     */
    materialName: string;
}

/**
 * BomItemDTO，BOM子项物料
 */
export interface BomItemDTO {
    id: number | string;
    /**
     * 子项物料
     */
    children?: BomItemDTO[];
    /**
     * 层级
     */
    level: number;
    /**
     * 物料编码
     */
    materialCode: string;
    /**
     * 物料id
     */
    materialId: number;
    /**
     * 物料名称
     */
    materialName: string;
    /**
     * 物料规格
     */
    materialSpecification?: string;
    /**
     * 生产类型
     */
    productionType?: ProductionType;
    /**
     * 备注
     */
    remarks?: string;
    /**
     * 单位
     */
    unit?: string;
    /**
     * 单件用量
     */
    unitUsage: number;
    unAction?: boolean;
    edit?: boolean;
}

/**
 * 物料编码数据类型
 */
export type MaterialParams = MaterialRequest & PageCommonParams;

export interface MaterialRequest {
    /**
     * 物料编码
     */
    materialCode?: string;
    /**
     * 物料名称
     */
    materialName?: string;
    /**
     * 是否为子项物料编码
     */
    isChildren?: boolean;
}

export type MaterialChooseResponse = ResponseListCommon<MaterialChooseVO>;
export interface MaterialChooseVO extends anyObj {
    /**
     * 主键
     */
    id?: number | string;
    /**
     * 是否被使用
     */
    isUse?: boolean;
    /**
     * 物料编码
     */
    materialCode?: string;
    materialId?: string;
    /**
     * 物料名称
     */
    materialName?: string;
    /**
     * 规格型号
     */
    materialSpecification?: string;
    /**
     * 生产类型
     */
    productionType?: ProductionType;
    /**
     * 物料单位
     */
    unit?: string;
}

/**
 * 生产类型
 */
export enum ProductionType {
    外购 = '外购',
    委外 = '委外',
    自制 = '自制'
}

/**
 * @: 请求bom明细参数
 * @return {*}
 */
export interface BomParams {
    id?: LocationQueryValue;
    materialCode?: LocationQueryValue;
}

/**
 * Bom 树层级视图数据类型
 */
export interface BomTreeVO {
    /**
     * 子项
     */
    children?: BomTreeVO[];
    /**
     * Id
     */
    id?: number;
    /**
     * 层级
     */
    level?: number;
    /**
     * 物料编码
     */
    materialCode?: string;
    /**
     * 物料名称
     */
    materialName?: string;
    /**
     * 物料规格
     */
    materialSpecification?: string;
    /**
     * 下层数量
     */
    num?: number;
    /**
     * 上层子项id
     */
    parentId?: number;
    /**
     * 单件用量
     */
    unitUsage?: number;

    collapsed?: boolean;
}
